// Reflect 对象  

const obj = {
    foo: '123',
    bar: 'asd'
}

const proxy =  new Proxy(obj, {
    set(target, property){
        console.log('whach logic~')
        // ...进行一系列对对象属性的监听与拦截  

        // 返回由统一对象API的Reflect方法将值赋值给对象的属性
        // 确保完成原有的行为，然后部署额外的功能
        return Reflect.set(target, property)
    }
})

// 原有的对象操作方法，比较凌乱，没有统一
// console.log('foo' in obj)
// console.log(delete obj['foo'])
// console.log(Object.keys(obj))

// 使用Reflect操作的话，是代码统一
// console.log(Reflect.has(obj, 'foo'))
// console.log(Reflect.deleteProperty(obj, 'foo'))
// console.log(Reflect.ownKeys(obj))


// 13个Reflect 静态方法
// Reflect.apply(target, thisArg, args)
// Reflect.construct(target, args)
// Reflect.get(target, name, receiver)
// Reflect.set(target, name, value, receiver)
// Reflect.defineProperty(target, name, desc)
// Reflect.deleteProperty(target, name)
// Reflect.has(target, name)
// Reflect.ownKeys(target)
// Reflect.isExtensible(target)
// Reflect.preventExtensions(target)
// Reflect.getOwnPropertyDescriptor(target, name)
// Reflect.getPrototypeOf(target)
// Reflect.setPrototypeOf(target, prototype)